//计时器函数

/**
 * @desc 计时器初始化函数，可以多次调用，超过时间不再继续计时
 * @param startTime 开始准备的时间
 * @param nowServiceTime 服务器的当前时间
 */
function initCountTimer (startTime, nowServiceTime) {
    var offsetTimeObj = getOffsetTime(nowServiceTime);
    console.log(typeof offsetTimeObj.offset);
    var isOverTime = false;
    var startTimeObj = new Date(startTime);
    var nowServiceTimeObj = new Date(nowServiceTime);
    // 30min from startTime!
    var endTimeObj = new Date(startTimeObj.valueOf() + 30 * 60 * 1000 - offsetTimeObj.offset);
    //判断是否超过规定时间
    isOverTime = nowServiceTimeObj.valueOf() >= endTimeObj.valueOf();
    //debugger;
    // Turn on Bootstrap
    $('[data-toggle="tooltip"]').tooltip();
    var $clock = $('#clock');
    if (!isOverTime) {
        //countdown初始化
        $clock.countdown(endTimeObj, function(event) {
            $(this).html(event.strftime('%M:%S'));
        });
    } else {
        $('#clock-out-wrap>span').html('开始准备已超过30分钟');
    }
}

/**
 * @desc 轮询函数，从服务器取得服务器当前时间，并能够在超过规定时间后，结束轮询
 * @returns {*}
 */
function intervalQuery () {
    var startTime = '2017-12-06 14:20:00';
    var nowServiceTime = new Date().valueOf();
    var isOverTime;

    //判断是否超过规定时间
    if (new Date(startTime).valueOf() >=  new Date(nowServiceTime).valueOf()) {
        return '结束轮询';
    }

    initCountTimer(startTime, nowServiceTime);
    setTimeout(intervalQuery, 10000);
    console.log('intervalQuery');
    return '轮询';
}

/**
 * @desc 校正服务器和本地的时间，offset是个带符号数字
 * @param nowServiceTime
 * @returns {{isLocalBig: boolean, offset: number}}
 */
function getOffsetTime (nowServiceTime) {
    var nowServiceTimeObj = new Date(nowServiceTime);
    var nowLocalTimeObj = new Date();
    var isLocalBig = true;
    var offset =  nowLocalTimeObj.valueOf() - nowServiceTimeObj.valueOf();
    if(nowServiceTimeObj.valueOf() > nowLocalTimeObj.valueOf()) {
        isLocalBig = false;
    }
    return {
        isLocalBig: isLocalBig,
        offset: offset
    }
}

//验证是否可以进入准备步骤，并提交准备当前激活的步骤


function checkIsCanGoThisStep (oldStepId, newStepId, vue) {
    var flag = false;
    var checkFlag = isThisStepChecked(newStepId, vue);
    if (checkFlag === 'ok' || checkFlag === 'preOk') {
        flag = true;
    }

    if (newStepId - oldStepId === 1 && checkFlag === 'preOkNext') {
        checkThisStep(oldStepId);
        vue.checkedStepId = oldStepId;
        debugger;
        flag = true;
    }

    return flag;
}

/**
 * @desc 判断当前步骤是否已经准备了
 * @param stepId
 * @param vue
 * @returns {*} 'ok'说明已经准备 'preOk' 说明当前步骤将要被准备
 */
function isThisStepChecked(stepId, vue) {
    var flag = false;
    var checkedStepId = vue.checkedStepId; //todo: 需要获取
    if (stepId <= checkedStepId) {
        flag = 'ok'; //当前步骤已经准备完毕
    } else if (stepId - checkedStepId <= 1) {
        flag = 'preOk'; //说明当前步骤将要被准备
    } else if (stepId - checkedStepId <= 2) {
        flag = 'preOkNext'; //要被准备的那个步骤的下一个
    }
    return flag;
}

/**
 * @desc 准备当前步骤
 * @param stepId
 * @returns {boolean}
 */
function checkThisStep(stepId) {
    return true;
}



//common
/**
 * @desc 简单的对象数组复制
 */
function cloneObj(oldObj) {
    return JSON.parse(JSON.stringify(oldObj))
}
